package me.yek.top.demo.util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class APIUtil {

	 /**
     * 新的md5签名，首尾放secret。
     * @param secret 分配给您的APP_SECRET
     */
     public static String md5Signature(TreeMap<String, String> params, String secret) {
             String result = null;
             StringBuffer orgin = getBeforeSign(params, new StringBuffer(secret));
             if (orgin == null)
            	 return result;
             orgin.append(secret);
             try {
                     MessageDigest md = MessageDigest.getInstance("MD5");
                     result = byte2hex(md.digest(orgin.toString().getBytes("utf-8")));
             } catch (Exception e) {
                     throw new java.lang.RuntimeException("sign error !");
             }
         return result;
     }
     /**
     * 二行制转字符串
     */
     public static String byte2hex(byte[] b) {
             StringBuffer hs = new StringBuffer();
             String stmp = "";
             for (int n = 0; n < b.length; n++) {
                     stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
                     if (stmp.length() == 1)
                             hs.append("0").append(stmp);
                     else
                             hs.append(stmp);
             }
             return hs.toString().toUpperCase();
     }
     /**
     * 添加参数的封装方法
     */
     private static StringBuffer getBeforeSign(TreeMap<String, String> params, StringBuffer orgin) {
             if (params == null)
                     return null;
             Map<String, String> treeMap = new TreeMap<String, String>();
             treeMap.putAll(params);
             Iterator<String> iter = treeMap.keySet().iterator();
             while (iter.hasNext()) {
                     String name = (String) iter.next();
                     orgin.append(name).append(params.get(name));
             }
             return orgin;
     }
     /**连接到TOP服务器并获取数据*/
     public static String getResult(String urlStr, String content) {
             URL url = null;
             HttpURLConnection connection = null;

             try {
                     url = new URL(urlStr);
                     connection = (HttpURLConnection) url.openConnection();
                     connection.setDoOutput(true);
                     connection.setDoInput(true);
                     connection.setRequestMethod("POST");
                     connection.setUseCaches(false);
                     connection.connect();

                     DataOutputStream out = new DataOutputStream(connection.getOutputStream());
                     out.write(content.getBytes("utf-8"));
                     out.flush();
                     out.close();

                     BufferedReader reader =
                     new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
                     StringBuffer buffer = new StringBuffer();
                     String line = "";
                     while ((line = reader.readLine()) != null) {
                             buffer.append(line);
                     }
                     reader.close();
                     return buffer.toString();
             } catch (IOException e) {
                     e.printStackTrace();
             } finally {
                     if (connection != null) {
                             connection.disconnect();
                     }
             }
             return null;
     }
     
}
